package com.chenbei.common.util;

import cn.idev.excel.FastExcel;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Excel工具类
 */
@Slf4j
public class ExcelUtil<T> {

    public static final String FORMULA_REGEX_STR = "=|-|\\+|@";

    public static final String[] FORMULA_STR = { "=", "-", "+", "@" };

    /**
     * 用于dictType属性数据存储，避免重复查缓存
     */
    public Map<String, String> sysDictMap = new HashMap<String, String>();

    /**
     * Excel sheet最大行数，默认65536
     */
    public static final int sheetSize = 65536;

    /**
     * 工作表名称
     */
    private String sheetName;

    /**
     * 数字格式
     */
    private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");

    /**
     * 实体对象
     */
    public Class<T> clazz;

    /**
     * 需要排除列属性
     */
    public String[] excludeFields;

    public ExcelUtil(Class<T> clazz)
    {
        this.clazz = clazz;
    }

    /**
     * 对excel表单默认第一个索引名转换成list（EasyExcel）
     * @param inputStream 输入流
     * @return 转换后集合
     */
    public List<T> importEasyExcel(InputStream inputStream) {
        return FastExcel.read(inputStream).head(clazz).sheet().doReadSync();
    }

    /**
     * 对list数据源将其里面的数据导入到excel表单（EasyExcel）
     * @param response 响应实例
     * @param list 导出数据集合
     * @param sheetName sheet名称
     */
    public void exportEasyExcel(HttpServletResponse response, List<T> list, String sheetName) {
        try {
            FastExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(list);
        } catch (IOException e) {
            log.error("导出EasyExcel异常{}", e.getMessage());
        }
    }
}
